// Para mejorar el ingreso de la direccion: http://es.debugmodeon.com/debate/creando-un-taglib


class Cliente {

    String nombreEstablecimiento
    String nit
    String telefono
    String contactoNombres
    String contactoApellidos
    String contactoTelefono
    String contactoTelefonoMovil
    TipoCliente tipoCliente
    EstadoCliente estadoCliente
    String direccionCampo1
    Integer direccionCampo2
    String direccionCampo3
    String direccionCampo4
    Integer direccionCampo5
    String direccionCampo6
    String direccionCampo7
    Integer direccionCampo8
    String direccionCampo9
    String correoElectronico
    String observaciones
    
    static constraints = {
        nombreEstablecimiento(blank:false, unique:true)
        nit(matches:/\d{3}[.\s]?\d{3}[.\s]?\d{3}[-\s]\d/)
        telefono(blank:false, matches:/\d{3}[-\s]?\d{2}[-\s]?\d{2}/)
        contactoNombres(blank:false)
        contactoApellidos(blank:false)
        contactoTelefono(matches:/\d{3}[-\s]?\d{2}[-\s]?\d{2}/)
        contactoTelefonoMovil(matches:/\d{3}[-\s]?\d{3}[-\s]?\d{2}[-\s]?\d{2}/)
        tipoCliente(blank:false)
        estadoCliente(blank:false)
        direccionCampo1(blank:false, inList:['Calle', 'Avenida', 'Carrera', 'Circular', 'Diagonal', 'Transversal'])
        direccionCampo2(min:0, matches:/\d{1,3}/)
        direccionCampo3(nullable:true, inList:['A','AA', 'AAA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'B', 'BA', 'BB', 'BBB', 'BC', 'BD', 'BE', 'BF', 'BG', 'C', 'CA', 'CB', 'CC', 'CCC', 'CD', 'CE', 'CF', 'CG', 'D', 'DA', 'DB', 'DC', 'DD', 'DDD', 'DE', 'DF', 'DG', 'E', 'EA', 'EB', 'EC', 'ED', 'EE', 'EEE', 'EF', 'EG', 'F', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF', 'FFF', 'FG', 'G', 'GA', 'GB', 'GC', 'GD', 'GE', 'GF', 'GG', 'GGG', 'H', 'HA', 'HB', 'HC', 'HD', 'HE', 'HF', 'HG', 'I', 'IA', 'IB', 'IC', 'ID', 'IE', 'IF', 'IG', 'J', 'JA', 'JB', 'JC', 'JD', 'JE', 'JF', 'JG', 'K', 'KA', 'KB', 'KC', 'KD', 'KE', 'KF', 'KG', 'L', 'LA', 'LB', 'LC', 'LD', 'LE', 'LF', 'LG', 'M', 'MA', 'MB', 'MC', 'MD', 'ME', 'MF', 'MG', 'N', 'NA', 'NB', 'NC', 'ND', 'NE', 'NF', 'NG', 'O', 'OA', 'OB', 'OC', 'OD', 'OE', 'OF', 'OG', 'P', 'PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PG', 'Q', 'QA', 'QB', 'QC', 'QD', 'QE', 'QF', 'QG', 'R', 'RA', 'RB', 'RC', 'RD', 'RE', 'RF', 'RG', 'S', 'SA', 'SB', 'SC', 'SD', 'SE', 'SF', 'SG', 'T', 'TA', 'TB', 'TC', 'TD', 'TE', 'TF', 'TG', 'U', 'UA', 'UB', 'UC', 'UD', 'UE', 'UF', 'UG', 'V', 'VA', 'VB', 'VC', 'VD', 'VE', 'VF', 'VG', 'W', 'WA', 'WB', 'WC', 'WD', 'WE', 'WF', 'WG', 'X', 'XA', 'XB', 'XC', 'XD', 'XE', 'XF', 'XG', 'Y', 'YA', 'YB', 'YC', 'YD', 'YE', 'YF', 'YG', 'Z', 'ZA', 'ZB', 'ZC', 'ZD', 'ZE', 'ZF', 'ZG'])
        direccionCampo4(inList:['Norte', 'Sur', 'Este', 'Oeste'], nullable:true)
        direccionCampo5(min:0, matches:/\d{1,3}/)
        direccionCampo6(nullable:true, inList:['A','AA', 'AAA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'B', 'BA', 'BB', 'BBB', 'BC', 'BD', 'BE', 'BF', 'BG', 'C', 'CA', 'CB', 'CC', 'CCC', 'CD', 'CE', 'CF', 'CG', 'D', 'DA', 'DB', 'DC', 'DD', 'DDD', 'DE', 'DF', 'DG', 'E', 'EA', 'EB', 'EC', 'ED', 'EE', 'EEE', 'EF', 'EG', 'F', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF', 'FFF', 'FG', 'G', 'GA', 'GB', 'GC', 'GD', 'GE', 'GF', 'GG', 'GGG', 'H', 'HA', 'HB', 'HC', 'HD', 'HE', 'HF', 'HG', 'I', 'IA', 'IB', 'IC', 'ID', 'IE', 'IF', 'IG', 'J', 'JA', 'JB', 'JC', 'JD', 'JE', 'JF', 'JG', 'K', 'KA', 'KB', 'KC', 'KD', 'KE', 'KF', 'KG', 'L', 'LA', 'LB', 'LC', 'LD', 'LE', 'LF', 'LG', 'M', 'MA', 'MB', 'MC', 'MD', 'ME', 'MF', 'MG', 'N', 'NA', 'NB', 'NC', 'ND', 'NE', 'NF', 'NG', 'O', 'OA', 'OB', 'OC', 'OD', 'OE', 'OF', 'OG', 'P', 'PA', 'PB', 'PC', 'PD', 'PE', 'PF', 'PG', 'Q', 'QA', 'QB', 'QC', 'QD', 'QE', 'QF', 'QG', 'R', 'RA', 'RB', 'RC', 'RD', 'RE', 'RF', 'RG', 'S', 'SA', 'SB', 'SC', 'SD', 'SE', 'SF', 'SG', 'T', 'TA', 'TB', 'TC', 'TD', 'TE', 'TF', 'TG', 'U', 'UA', 'UB', 'UC', 'UD', 'UE', 'UF', 'UG', 'V', 'VA', 'VB', 'VC', 'VD', 'VE', 'VF', 'VG', 'W', 'WA', 'WB', 'WC', 'WD', 'WE', 'WF', 'WG', 'X', 'XA', 'XB', 'XC', 'XD', 'XE', 'XF', 'XG', 'Y', 'YA', 'YB', 'YC', 'YD', 'YE', 'YF', 'YG', 'Z', 'ZA', 'ZB', 'ZC', 'ZD', 'ZE', 'ZF', 'ZG'])
        direccionCampo7(inList:['Norte', 'Sur', 'Este', 'Oeste'], nullable:true)
        direccionCampo8(min:0, matches:/\d{1,3}/)
        direccionCampo9()
        correoElectronico(blank:false, email:true)
        observaciones()
    }

    String toString(){
        nombreEstablecimiento
    }
}
